package com.bw.dg.util;


import org.apache.poi.hssf.usermodel.*;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.net.URL;


/**
 * 导出Excel
 * @param <T>
 */
public class ExportExcelUtil<T>{

    /**
     * 导出带图片的表格  只能有一张图片!!!!!!!!!   图片完整路径
     * @param sheetName  sheet 名称
     * @param title   标题 数组
     * @param values  内容数组  [1] [2]     两堆数组    1代表 创建多少行 取决于具体有多少对象  2 代表每行的数据  取决于对象的属性
     * @param index   在内容数组2 中 图片的位置  手动存入
     * @return  表格对象
     * @throws Exception  抛出异常
     */
    public static HSSFWorkbook ExcelImgUtil(String sheetName, String []title, String [][]values,int index) throws Exception {

        //创建 表格
        HSSFWorkbook wb = new HSSFWorkbook();
        //sheet 名称
        HSSFSheet sheet = wb.createSheet(sheetName);
        // 创建表格标题行 第一行
        HSSFRow row = sheet.createRow(0);

        //设置值表头 设置表头居中
        HSSFCellStyle style = wb.createCellStyle();
        // 创建一个居中格式   1水平  2垂直
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        //创建标题
        for(int i=0;i<title.length;i++){
            //设置样式
            row.createCell(i).setCellStyle(style);
            //设置内容
            row.createCell(i).setCellValue(title[i]);
        }

        //声明!
        String imgUrl = null;
        URL url = null;
        String suffix = null;
        ByteArrayOutputStream byteArrayOut = null;
        //画图的顶级管理器，一个sheet只能获取一个（一定要注意这点）
        HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
        for(int i =0;i<values.length;i++){
            row = sheet.createRow(i+1);
            if(values[i][index] == null || "".equals(values[i][index]) || values[i][index].length() < 15){
                imgUrl = "http://localhost:10086/static"; //表示无头像
            }else{
                //先把读进来的图片放到一个ByteArrayOutputStream中，以便产生ByteArray
                imgUrl = "http://localhost:10086"+values[i][index];
            }
            for(int j=0;j<values[i].length;j++){
                //将内容按顺序赋给对应的列对象
                row.createCell(j).setCellValue(values[i][j]);
            }
            ////-------------------------------------------------图片--------------------------------------

            //将地址存入URL
            url = new URL(imgUrl);
            //获取文件后缀名
            suffix= imgUrl.substring(imgUrl.lastIndexOf(".") + 1);
            //放入 缓存
            BufferedImage bufferImg = ImageIO.read(url);
            //创建字节数组输出流
            byteArrayOut = new ByteArrayOutputStream();
            //这里要注意formatName要缓存后缀名
            //参数代表  1 写入缓存的图片 2 图片后缀名  3 字节数组
            ImageIO.write(bufferImg, suffix, byteArrayOut);
            //anchor主要用于设置图片的属性
            HSSFClientAnchor anchor =
                    new HSSFClientAnchor
                            (        0, //x缩放
                                    0, // y缩放
                                    1023, //最大1023
                                    255, //最大255
                                    (short) index,  //于下下个参数进行定位 0开始
                                    i+1, //在第几行
                                    (short) index, //宽度占几格 0开始
                                    i+1 //第几列
                            );
            anchor.setAnchorType(3);

            //插入图片
            patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));



        }
        //释放资源
        byteArrayOut.close();
        return wb;
    }
}
